var ws = require("nodejs-websocket");
console.log("开始建立连接...")
// 在线人数
var perponArray = [];
//字典
var AllUserData = [];
// gloArray
var gloArray = [];
//qunid
// var qunid = 9;
var arr = [];
var game1 = null,game2 = null , game1Ready = false , game2Ready = false;
var server = ws.createServer(function(conn){
    conn.on("text", function (str) {
        var data = JSON.parse(str);
        
        if(data.type == 'link'){ // 有人连接进入房间
            conn.name = data.name;
            conn.id = data.id;
            conn.qunid = data.qunid;
            linesuccess(data,conn);
            onlinenum();
            talk({'name':data.name, 'text':'进入房间','qunid':data.qunid});
            
            return;
        }else if(data.type == 'talk'){ // 发消息
            talk(data);
            return;
        }else if (data.type == 'single'){ // 一对一聊天

            onetoone(data);
            return;
        }
        
        console.log("收到的信息为:"+str)

        server.connections.forEach(function(conn1) { // 多人聊天室
            conn1.sendText(str);
        })
    })
    conn.on("close", function (code, reason) {
        console.log("关闭连接")
        outline({'id':conn.id, 'name':conn.name});
        onlinenum();
        talk({'name':conn.name, 'text':'退出房间','qunid':conn.qunid});
    });
    conn.on("error", function (code, reason) {
        console.log("异常关闭")
    });
}).listen(1234)
console.log("WebSocket建立完毕")

//在线人数
function onlinenum(){
    
    server.connections.forEach(function(ar) { // 多人聊天室
        ar.sendText(JSON.stringify({
            'type':'onlinenumber',
            'total': perponArray.length,
            'list':perponArray,
            'lone':gloArray
        }));
    });
}
// 连接成功
function linesuccess(data,conn){
    console.log(data.id + ' 进入房间');
    perponArray.push(data.id);
    console.log(perponArray);
    glostatus(data, 1);

    if(CheckIsNew(data)){
        AllUserData.push({
            'id':data.id,
            'name':data.name,
            'ws':conn
        })
    }
    console.log(AllUserData);
    server.connections.forEach(function(ar) { // 多人聊天室
        ar.sendText(JSON.stringify({
            'type':'success',
            'text': data.name + '进入房间'
        }));
    });
}

// 推出房间
function outline(data){
    console.log('退出房间' + data.id)
    var index = perponArray.indexOf(data.id);
    if(index > -1) perponArray.splice(index,1);
    glostatus(data, 2);
    server.connections.forEach(function(ar) { // 多人聊天室
        ar.sendText(JSON.stringify({
            'type':'outline',
            'text': data.name + '退出房间'
        }));
    });

    for (var i = 0; i < AllUserData.length; i++) {
        if (data.id == AllUserData[i]['id']) {
            AllUserData.splice(i,1);
        }
    }

}

// 交流
function talk(data){
    if(data.qunid == null || data.qunid == ''){
        return false;
    }
    server.connections.forEach(function(ar) { // 多人聊天室
        ar.sendText(JSON.stringify({
            'type':'talk',
            'text':data.text,
            'name':data.name
        }));
    });
}

// 一对一交流
function onetoone(data){
    console.log(data);
     for (var i = 0; i < gloArray.length; i++) {
        if(data.id == gloArray[i]['id']){
            gloArray[i]['tip'] = true;
        }

    }
    // let nick ='匿名';
    for (var i = 0; i < AllUserData.length; i++) {
        if(data.id == AllUserData[i]['id']){
             AllUserData[i]['ws'].sendText(JSON.stringify({
                'type':'single',
                'text':data.text,
                'name':data.name,
                'status':true
             }));
             // nick = AllUserData[i]['name'];
        }
        if(data.toid == AllUserData[i]['id']){
             AllUserData[i]['ws'].sendText(JSON.stringify({
                'type':'single',
                'text':data.text,
                'name':data.name,
                'status':true
             }));
             //在线
             AllUserData[i]['ws'].sendText(JSON.stringify({
                'type':'onlinenumber',
                'total': perponArray.length,
                'list':perponArray,
                'lone':gloArray
             }));
        }
        
    }
    //2019 新消息提醒
   

    // onlinenum();


}

function CheckIsNew(data){
    // console.log(AllUserData);
    for (var i = 0; i < AllUserData.length; i++) {
        if(data.id == AllUserData[i]['id']){
            return false;
        }
    }
    return true;

}

function glostatus(data, type){
    var j,status = true;
    for (var i = 0; i < gloArray.length; i++) {
        if(data.id == gloArray[i]['id']){
            status = false;
            j = i;
        }
    }
    if(type ==2 && !status){
        gloArray.splice(j,1);
    }
    if(type ==1 && status){
        gloArray.push({
            'id':data.id,
            'name':data.name,
            'tip':false
        })
    }
}




